package com.huike.clues.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.huike.clues.mapper.MpDictDataMapper;
import com.huike.clues.service.MpDictDataService;
import com.huike.common.entity.MPSysDictData;
import com.huike.common.utils.SecurityUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Objects;

/**
 * @Description TODO
 * @Author guan
 * @Date 2023-08-29 8:42
 */
@Service
public class MpDictDataServiceImpl extends ServiceImpl<MpDictDataMapper, MPSysDictData> implements MpDictDataService {

    @Resource
    private MpDictDataMapper mpDictDataMapper;

    private LambdaQueryWrapper getWrapper(MPSysDictData mpSysDictData) {
        LambdaQueryWrapper<MPSysDictData> wrapper = new LambdaQueryWrapper<>();
        wrapper.like(mpSysDictData.getDictLabel() != null && !Objects.equals(mpSysDictData.getDictLabel(), ""), MPSysDictData::getDictLabel, mpSysDictData.getDictLabel())
                .eq(mpSysDictData.getStatus() != null && !Objects.equals(mpSysDictData.getStatus(), ""), MPSysDictData::getStatus, mpSysDictData.getStatus())
                .eq(mpSysDictData.getDictType() != null && !Objects.equals(mpSysDictData.getDictType(), ""), MPSysDictData::getDictType, mpSysDictData.getDictType())
                .eq(mpSysDictData.getDictCode() != null, MPSysDictData::getDictCode, mpSysDictData.getDictCode());
        return wrapper;
    }

    /**
     * 字典列表
     * @param mpSysDictData
     * @return
     */
    @Override
    public List<MPSysDictData> getList(MPSysDictData mpSysDictData) {
        //调用抽取出来的方法
        LambdaQueryWrapper wrapper = getWrapper(mpSysDictData);
        List<MPSysDictData> list = mpDictDataMapper.selectList(wrapper);
        return list;
    }

    /**
     * 根据字典类型查询字典数据信息
     * @param dictType
     * @return
     */
    @Override
    public List listByDictType(String dictType) {

        MPSysDictData mpSysDictData = new MPSysDictData();
        mpSysDictData.setDictType(dictType);
        //调用抽取出来的方法
        LambdaQueryWrapper wrapper = getWrapper(mpSysDictData);

        List<MPSysDictData> list = mpDictDataMapper.selectList(wrapper);

        return list;
    }

    /**
     * 查询字典数据详细
     * @param dictCode
     * @return
     */
    @Override
    public MPSysDictData listByDictCode(Long dictCode) {
        //调用抽取出来的方法
        MPSysDictData mpSysDictData = new MPSysDictData();
        mpSysDictData.setDictCode(dictCode);
        MPSysDictData mpSysDictData1 = mpDictDataMapper.selectById(mpSysDictData);

        return mpSysDictData1;
    }

    /**
     * 新增字典数据
     * @param mpSysDictData
     * @return
     */
    @Override
    public void add(MPSysDictData mpSysDictData) {
        //设置默认创建时间，修改时间，创建人，修改人
        mpSysDictData.setCreateTime(LocalDateTime.now());
        mpSysDictData.setUpdateTime(LocalDateTime.now());
        mpSysDictData.setCreateBy(SecurityUtils.getUsername());
        mpSysDictData.setUpdateBy(SecurityUtils.getUsername());
        //执行方法新增对象到数据库
        mpDictDataMapper.insert(mpSysDictData);

    }

    /**
     * 修改保存字典数据
     * @param mpSysDictData
     */
    @Override
    public void updateDict(MPSysDictData mpSysDictData) {
        //把修改人以及修改时间赋值给mpSysDictData对象
        mpSysDictData.setUpdateTime(LocalDateTime.now());
        mpSysDictData.setUpdateBy(SecurityUtils.getUsername());
        //调用方法修改数据
        mpDictDataMapper.updateById(mpSysDictData);
    }

    /**
     * 批量删除数据
     * @param dictCodes
     */
    @Override
    public void deleteDict(List<Long> dictCodes) {
        //执行方法根据dictcode获得对应的字典数据
        List<MPSysDictData> mpSysDictData = mpDictDataMapper.selectBatchIds(dictCodes);
        //遍历集合
        mpSysDictData.forEach(mpSysDictData1 -> {
            //判断其中有没有数据处于启用状态，如果有，就提醒用户，没有就直接删除
            if (mpSysDictData1.getStatus().equals("1")){
         throw new RuntimeException("有数据处于启用状态，不能删除");
        }});
        //执行方法删除勾选中的数据
        mpDictDataMapper.deleteBatchIds(dictCodes);
    }
}
